[AIX] support 64bit global symbol table for big archive
authorzhijian <zhijian@ca.ibm.com>
Thu, 18 May 2023 14:54:14 +0000 (10:54 -0400)
committerzhijian <zhijian@ca.ibm.com>
Thu, 18 May 2023 14:54:14 +0000 (10:54 -0400)
commit38d3c6cb9b9dc67a8a5460aa241824be3240b81e
tree4b2a825f03d4987ef105ff260b848ce01896c6ed
parent6f28b0bb0ab3323c1c5c375db56b35c4933837e4
[AIX] support 64bit global symbol table for big archive

Summary:

In big archive , there is 32bit global symbol table and 64 bit global symbol table. llvm-ar only support 32bit global symbol table this moment, we need to support the 64 bit global symbol table.

https://www.ibm.com/docs/en/aix/7.2?topic=formats-ar-file-format-big

Global Symbol Tables

Immediately following the member table, the archive file contains two global symbol tables. The first global symbol table locates 32-bit file members that define global symbols; the second global symbol table does the same for 64-bit file members. If the archive has no 32-bit or 64-bit file members, the respective global symbol table is omitted. The strip command can be used to delete one or both global symbol tables from the archive. The fl_gstoff field in the fixed-length header contains the offset to the 32-bit global symbol table, and the fl_gst64off contains the offset to the 64-bit global symbol table.

Reviewers: James Henderson,Stephen Peckham
Differential Revision: https://reviews.llvm.org/D142479
llvm/include/llvm/Object/Archive.h
llvm/lib/Object/Archive.cpp
llvm/lib/Object/ArchiveWriter.cpp
llvm/test/Object/Inputs/bitcode-sym32.ll [new file with mode: 0644]
llvm/test/Object/Inputs/bitcode-sym64.ll [new file with mode: 0644]
llvm/test/Object/bigarchive-malformed-global-symbol-table [new file with mode: 0644]
llvm/test/Object/bigarchive-malformed-header.test [new file with mode: 0644]
llvm/test/Object/bigarchive-symboltable.test [new file with mode: 0644]
llvm/test/tools/llvm-ar/malformed-global-symbol-table-bigarchive.test [deleted file]