@@ -89,7 +89,7 @@ static const char helpmsg[] = R"(
8989 --color-diagnostics=[auto,always,never]
9090 Use colors in diagnostics
9191 --color-diagnostics Alias for --color-diagnostics=always
92- --compress-debug-sections [none,zlib,zlib-gabi,zstd]
92+ --compress-debug-sections [none,zlib,zlib-gabi,zstd,zstd:1,...,zstd:22 ]
9393 Compress .debug_* sections
9494 --dc Ignored
9595 --dependency-file=FILE Write Makefile-style dependency rules to FILE
@@ -1039,14 +1039,22 @@ std::vector<std::string> parse_nonpositional_args(Context<E> &ctx) {
10391039 } else if (read_flag (" zero-to-bss" )) {
10401040 ctx.arg .zero_to_bss = true ;
10411041 } else if (read_arg (" compress-debug-sections" )) {
1042- if (arg == " zlib" || arg == " zlib-gabi" )
1042+ if (arg == " zlib" || arg == " zlib-gabi" ) {
10431043 ctx.arg .compress_debug_sections = ELFCOMPRESS_ZLIB;
1044- else if (arg == " zstd" )
1044+ } else if (arg == " zstd" ) {
10451045 ctx.arg .compress_debug_sections = ELFCOMPRESS_ZSTD;
1046- else if (arg == " none" )
1046+ } else if (arg.starts_with (" zstd:" )) {
1047+ ctx.arg .compress_debug_sections = ELFCOMPRESS_ZSTD;
1048+ i64 level = parse_number (ctx, " compress-debug-sections" , arg.substr (5 ));
1049+ if (level < 1 || level > 22 )
1050+ Fatal (ctx) << " invalid --compress-debug-sections argument: " << arg
1051+ << " (zstd level must be between 1 and 22)" ;
1052+ ctx.arg .compress_debug_sections_level = level;
1053+ } else if (arg == " none" ) {
10471054 ctx.arg .compress_debug_sections = ELFCOMPRESS_NONE;
1048- else
1055+ } else {
10491056 Fatal (ctx) << " invalid --compress-debug-sections argument: " << arg;
1057+ }
10501058 } else if (read_arg (" wrap" )) {
10511059 ctx.arg .wrap .insert (arg);
10521060 } else if (read_flag (" omagic" ) || read_flag (" N" )) {
0 commit comments