| ... | ... | @@ -6124,13 +6124,69 @@ fn formatShdr( |
| 6124 | 6124 | _ = options; |
| 6125 | 6125 | _ = unused_fmt_string; |
| 6126 | 6126 | const shdr = ctx.shdr; |
| 6127 | | try writer.print("{s} : @{x} ({x}) : align({x}) : size({x})", .{ |
| 6127 | try writer.print("{s} : @{x} ({x}) : align({x}) : size({x}) : flags({})", .{ |
| 6128 | 6128 | ctx.elf_file.getShString(shdr.sh_name), shdr.sh_offset, |
| 6129 | 6129 | shdr.sh_addr, shdr.sh_addralign, |
| 6130 | | shdr.sh_size, |
| 6130 | shdr.sh_size, fmtShdrFlags(shdr.sh_flags), |
| 6131 | 6131 | }); |
| 6132 | 6132 | } |
| 6133 | 6133 | |
| 6134 | fn fmtShdrFlags(sh_flags: u64) std.fmt.Formatter(formatShdrFlags) { |
| 6135 | return .{ .data = sh_flags }; |
| 6136 | } |
| 6137 | |
| 6138 | fn formatShdrFlags( |
| 6139 | sh_flags: u64, |
| 6140 | comptime unused_fmt_string: []const u8, |
| 6141 | options: std.fmt.FormatOptions, |
| 6142 | writer: anytype, |
| 6143 | ) !void { |
| 6144 | _ = unused_fmt_string; |
| 6145 | _ = options; |
| 6146 | if (elf.SHF_WRITE & sh_flags != 0) { |
| 6147 | try writer.writeAll("W"); |
| 6148 | } |
| 6149 | if (elf.SHF_ALLOC & sh_flags != 0) { |
| 6150 | try writer.writeAll("A"); |
| 6151 | } |
| 6152 | if (elf.SHF_EXECINSTR & sh_flags != 0) { |
| 6153 | try writer.writeAll("X"); |
| 6154 | } |
| 6155 | if (elf.SHF_MERGE & sh_flags != 0) { |
| 6156 | try writer.writeAll("M"); |
| 6157 | } |
| 6158 | if (elf.SHF_STRINGS & sh_flags != 0) { |
| 6159 | try writer.writeAll("S"); |
| 6160 | } |
| 6161 | if (elf.SHF_INFO_LINK & sh_flags != 0) { |
| 6162 | try writer.writeAll("I"); |
| 6163 | } |
| 6164 | if (elf.SHF_LINK_ORDER & sh_flags != 0) { |
| 6165 | try writer.writeAll("L"); |
| 6166 | } |
| 6167 | if (elf.SHF_EXCLUDE & sh_flags != 0) { |
| 6168 | try writer.writeAll("E"); |
| 6169 | } |
| 6170 | if (elf.SHF_COMPRESSED & sh_flags != 0) { |
| 6171 | try writer.writeAll("C"); |
| 6172 | } |
| 6173 | if (elf.SHF_GROUP & sh_flags != 0) { |
| 6174 | try writer.writeAll("G"); |
| 6175 | } |
| 6176 | if (elf.SHF_OS_NONCONFORMING & sh_flags != 0) { |
| 6177 | try writer.writeAll("O"); |
| 6178 | } |
| 6179 | if (elf.SHF_TLS & sh_flags != 0) { |
| 6180 | try writer.writeAll("T"); |
| 6181 | } |
| 6182 | if (elf.SHF_X86_64_LARGE & sh_flags != 0) { |
| 6183 | try writer.writeAll("l"); |
| 6184 | } |
| 6185 | if (elf.SHF_MIPS_ADDR & sh_flags != 0 or elf.SHF_ARM_PURECODE & sh_flags != 0) { |
| 6186 | try writer.writeAll("p"); |
| 6187 | } |
| 6188 | } |
| 6189 | |
| 6134 | 6190 | const FormatPhdrCtx = struct { |
| 6135 | 6191 | elf_file: *Elf, |
| 6136 | 6192 | phdr: elf.Elf64_Phdr, |