Re: [PATCH] Systematize parsing of machine code formats

2023-09-19 Thread Dmitry V. Levin
On Mon, Aug 07, 2023 at 02:20:40PM -0400, John Ericson wrote:
> Instead of treating them as OSes, we treat them as their own category.
> This is modeled on what LLVM does with its `ObjectFormatType` enum [1],
> advancing my long-running project of trying to nudge GNU config and LLVM
> towards each other, taking the best ideas of both.
> 
> Currently, my emphasis is just on code cleanup. There are just a few
> tests for newly supported changes that fall out of this. But down the
> road, this also opens the door to parsing configs with more than 4
> components, like [2].
> 
> [1]:
> https://llvm.org/doxygen/classllvm_1_1Triple.html#a83e907e55fa50e093caa96a0aff96201
> 
> [2]:
> https://github.com/llvm/llvm-project/blob/a18266473be1439d324059afa0e8b124f0466428/llvm/unittests/TargetParser/TripleTest.cpp#L1873C50-L1873C77
> added in
> https://github.com/llvm/llvm-project/commit/28b82bc39ef076527c07718724913f70b5d60b69
> ---
>  config.sub| 133 ++
>  testsuite/config-sub.data |   2 +
>  2 files changed, 92 insertions(+), 43 deletions(-)

Applied, thanks.


-- 
ldv



[PATCH] Systematize parsing of machine code formats

2023-08-07 Thread John Ericson
Instead of treating them as OSes, we treat them as their own category.
This is modeled on what LLVM does with its `ObjectFormatType` enum [1],
advancing my long-running project of trying to nudge GNU config and LLVM
towards each other, taking the best ideas of both.

Currently, my emphasis is just on code cleanup. There are just a few
tests for newly supported changes that fall out of this. But down the
road, this also opens the door to parsing configs with more than 4
components, like [2].

[1]:
https://llvm.org/doxygen/classllvm_1_1Triple.html#a83e907e55fa50e093caa96a0aff96201

[2]:
https://github.com/llvm/llvm-project/blob/a18266473be1439d324059afa0e8b124f0466428/llvm/unittests/TargetParser/TripleTest.cpp#L1873C50-L1873C77
added in
https://github.com/llvm/llvm-project/commit/28b82bc39ef076527c07718724913f70b5d60b69
---
 config.sub| 133 ++
 testsuite/config-sub.data |   2 +
 2 files changed, 92 insertions(+), 43 deletions(-)

diff --git a/config.sub b/config.sub
index 6ae2502..c8dc08d 100755
--- a/config.sub
+++ b/config.sub
@@ -1284,11 +1284,12 @@ esac
 
 # Decode manufacturer-specific aliases for certain operating systems.
 
-if test x$basic_os != x
+if test x"$basic_os" != x
 then
 
 # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
 # set os.
+obj=
 case $basic_os in
gnu/linux*)
kernel=linux
@@ -1488,10 +1489,16 @@ case $os in
os=eabi
;;
*)
-   os=elf
+   os=
+   obj=elf
;;
esac
;;
+   aout* | coff* | elf* | pe*)
+   # These are machine code file formats, not OSes
+   obj=$os
+   os=
+   ;;
*)
# No normalization, but not necessarily accepted, that comes 
below.
;;
@@ -1510,12 +1517,15 @@ else
 # system, and we'll never get to this point.
 
 kernel=
+obj=
 case $cpu-$vendor in
score-*)
-   os=elf
+   os=
+   obj=elf
;;
spu-*)
-   os=elf
+   os=
+   obj=elf
;;
*-acorn)
os=riscix1.2
@@ -1525,28 +1535,35 @@ case $cpu-$vendor in
os=gnu
;;
arm*-semi)
-   os=aout
+   os=
+   obj=aout
;;
c4x-* | tic4x-*)
-   os=coff
+   os=
+   obj=coff
;;
c8051-*)
-   os=elf
+   os=
+   obj=elf
;;
clipper-intergraph)
os=clix
;;
hexagon-*)
-   os=elf
+   os=
+   obj=elf
;;
tic54x-*)
-   os=coff
+   os=
+   obj=coff
;;
tic55x-*)
-   os=coff
+   os=
+   obj=coff
;;
tic6x-*)
-   os=coff
+   os=
+   obj=coff
;;
# This must come before the *-dec entry.
pdp10-*)
@@ -1568,19 +1585,24 @@ case $cpu-$vendor in
os=sunos3
;;
m68*-cisco)
-   os=aout
+   os=
+   obj=aout
;;
mep-*)
-   os=elf
+   os=
+   obj=elf
;;
mips*-cisco)
-   os=elf
+   os=
+   obj=elf
;;
mips*-*)
-   os=elf
+   os=
+   obj=elf
;;
or32-*)
-   os=coff
+   os=
+   obj=coff
;;
*-tti)  # must be before sparc entry or we get the wrong os.
os=sysv3
@@ -1589,7 +1611,8 @@ case $cpu-$vendor in
os=sunos4.1.1
;;
pru-*)
-   os=elf
+   os=
+   obj=elf
;;
*-be)
os=beos
@@ -1670,10 +1693,12 @@ case $cpu-$vendor in
os=uxpv
;;
*-rom68k)
-   os=coff
+   os=
+   obj=coff
;;
*-*bug)
-   os=coff
+   os=
+   obj=coff
;;
*-apple)
os=macos
@@ -1691,7 +1716,8 @@ esac
 
 fi
 
-# Now, validate our (potentially fixed-up) OS.
+# Now, validate our (potentially fixed-up) individual pieces (OS, OBJ).
+
 case $os in
# Sometimes we do "kernel-libc", so those need to count as OSes.
musl* | newlib* | relibc* | uclibc*)
@@ -1719,11 +1745,11 @@ case $os in
 | mirbsd* | netbsd* | dicos* | openedition* | ose* \
 |