Move a.out libraries to /usr/lib/aout to make space for ELF libs.
Make rtld usr /usr/lib/aout as default library path.
Make ldconfig reject /usr/lib as an a.out library path.
Fix various Makefiles for LIBDIR!=/usr/lib breakage.
This will after a make world & reboot give a system that no
longer uses /usr/lib/*, infact one could remove all the old
libraries there, they are not used anymore.
We are getting close to an ELF make world, but I'll let this
all settle for a week or two...
Move our old a.out utils to /usr/libexec/aout.
Enable binutils and put the utils in /usr/libexec/elf
Enable objformat, a little helper program that calls the right
utils based on /etc/objformat and $OBJFORMAT.
This will enable the ELF generating tools.
Remember that this is only step one, the system is still compiled
and run in a.out format ONLY.
Problem left to solve: The BSD manpages wins over the GNU equivalents
as the are installed last. We need to distinguish between the manpages
somehow...
CURDIR it has been built without an obj directory; however if it is in
neither of those places, we expect it to be in DESTDIR.
Yes Bruce, I know this is broken because the host is not supposed to be
the same as the target, but we need to get the hosted build working
properly first before even attempting a cross compiled operating
system build. That will need to concept of TOOLSDIR or something that
can be mapped to DESTDIR in the case of a hosted build and set to the
installed tools in a cross compiled build. Later, later, later!
perl executable from overriding the object directory path search where
perl is most likely to be. Most people haven't seen this because it
defaulted to /usr/bin/perl which might be OK as a fallback, but when
bootstrapping a new version (or the *first* version on alpha), we don't
really want to use /usr/bin/perl.
kernel's) curproc is null. This fixes endless recursion in
xfer_umem() for attempts to read from user addresses, in particular
for attempts to read %fs and %gs from the pcb for `info reg'.
gas for each target format. So for m68k targets that means several
gases. I wanted a m68k gas for VxWorks which uses aout in sun3 big
endian format, cross compiled on i386 under FreeBSD using libraries
supplied by DEC and intended by them for cross compilation on Alpha
under OSF/1. And it actually works!
support more than one architecture at a time, build as from the
default for the host and if CROSS_TOOLS defines other architectures,
build them as as_${arch}
are now included according to the cross-architecture support required,
default the BINDIR for i386 to /usr/libexec/elf here instead of in
all the i386 specific makefiles. For all other architectures, BINDIR
is just /usr/bin.
be defined (in /etc/make.conf, say) and set to the additional architectures
that need to be compiled in. So on alpha I set CROSS_TOOLS = i386.
On i386 you can't build alpha due to lack of 64-bit support on 32-bit
architectures, but that's a GNU problem.
This change relies on makefiles in the binutils sub-directories having
the extension defined in the CROSS_TOOLS, instead of those makefiles
being selected based on the host architecture.
worked because .ORDER prevented problems from concurrent generation
of multiple parsers (and their headers), and there were no missing
dependencies because the generated headers were not actually used.
with `make -jN' because they did the right things to generate cexp.h
without clobbering cexp.c, and there were no missing dependencies on
cexp.h because cexp.h isn't actually used.
Fixed style bugs.
bsd.man.mk doesn't include ${.CURDIR}/../Makefile.inc.
Removed GDBDIR-redefinition-prevention ifdef. It hasn't done anothing
for a long time, if ever. The directory is defined to the same value in
each subdir and had the same value because all subdirs are at the same
level. Keep defining it in the subdirs since that is more flexible and
no more verbose.
Prepare to inherit BINDIR by including ../Makefile.inc.
requires the new file.
Fixed stale near-copy of contrib/libreadline/doc/hsuser.texinfo. Patch
it at build ntime, and only keep the patch for it here.
Don't keep a copy of contrib/gdb/gdb/doc/all-cfg.texi here. Link to it
at build time.
Fixed stale near-copy of contrib/libreadline/doc/hsuser.texinfo. Patch
it at build ntime, and only keep the patch for it here.
Don't keep a copy of contrib/gdb/gdb/doc/all-cfg.texi here. Link to it
at build time.
$Id$ should be preceded by a tab
Don't include ../Makefile.inc when it is not used explicitly
Use the normal amount of horizontal and vertical whitspace (1 tab/none)
Don't override the (correct) default for MAN1
Use the correct order for -I paths
Use config.h generated by `configure', don't use a huge CFLAGS statement
Enable useage of libreadline in config.h, configure didn't enable it itself.
- Makefiles shouldn't have copyrights.
- $Id$ should be preceded by a tab.
- Don't include ../Makefile.inc when it is not used explicitly.
- Use the normal amount of horizontal and vertical whitspace (1 tab/none).
- Don't override the (correct) default for MAN1.
- Use the correct order for -I paths.
- Don't use += to initialize SUBDIR.
- use the config.h generated by `configure' and don't use a huge
CFLAGS statement.
I think the other Makefiles under src/gnu needs some polishing as well ;-)
Thanks to Bruce, everythig looks smarter now.
Obtained from: Bruce Evans <bde@zeta.org.au>
on bi-parser.h. Not having it sometimes (only with `make -j') triggered
a bug suite that led to ordinary cpp output being put in .depend files.
Various bugs (the main one only with `make -j') prevented timely detection
of failure to build and install gnu/usr.bin/cc. Eventually the missing
${WORLDTMP}/usr/libexec/cpp caused ${WORLDTMP}/usr/bin/cpp to be invoked
by cc, and this version of cpp is not suitable for such invocation.
Ordinary cpp output was put in .depend files when cpp terminated options
processing before seeing the -M flag.
Cleaned up.
magic number byte ordering for FreeBSD. This makes "file" describe
our object files as "FreeBSD/i386 object" instead of as NetBSD
object files. In case this seems drastic and risky, Bruce points
out that the "ld -r -x" step that is done on every object file when
building libraries fixes the byte ordering in the same way. I have
been running with this patch for over a month and have seen no
problems.
With -O3, egcs generates such forward references.
PR: gnu/6055
Reviewed by: jdp
Submitted by: Dmitrij Tejblum <tejblum@arc.hq.cti.ru> in slightly different form
be worth much effort. Install all i386 binutils programs in
"/usr/libexec/elf". Disable a.out support in libbfd. It's too
dangerous to leave it in. Some of the utilities think they can
handle a.out, but they generate bad object files.
These are equivalent to "fildq" and "fistpq" respectively. This
fixes the bad floating point object code that resulted after recent
changes in the compiler.
Test driven by: "Mike Burgett" <mburgett@awen.com>,
Amancio Hasty <hasty@rah.star-gate.com>
last fix of this type. Installing from a read-only object tree should
work now.
Install files using a single install command where this is easy; don't
use shell loops.
Don't use MANDEPEND to complicate things.
the source files. E.g., the stale version of locate.cc in the
source directory was sometimes used. We didn't even use beforedepend.
Added temporary files to CLEANFILES.
Fixed some style bugs.
generated source files in SRCS.
Don't use MANDEPEND to complicate things. Just put the generated
man page in CLEANFILES.
Partly fixed yacc header brokenness, as in ../eqn/Makefile.
Added temporary files to CLEANFILES.
Fixed some style bugs.
generated source files in SRCS.
Don't use MANDEPEND to complicate things. Just set MAN1 and put
generated man pages in CLEANFILES.
Added temporary files to CLEANFILES.
Partly fixed a potentially fatal bug involving the yacc header.
We generate eqn.cc (even if there is a version of it in the source
directory older than eqn.y) and a matching eqn.tab.h, but only use
the possibly-non-matching eqn.tab.h in the source directory. This
works because Cygnus's yacc happened to generate a y.tab.h identical
to the current generated one. The correct version will be used
when the wrong version is deleted from the source tree. Kludge to
get the header generated early enough. Yacc headers are mishandled
everywhere they are renamed (and used).
Generate neqn at build time, not at install time.
Fixed some style bugs.
target. .ORDER doesn't work right, but is used for things related
to the depend target. It "works" for the depend target by skipping
the build of .depend when N >= 2 and there is a non-default
beforedepend target with no rules. Recent fixes made almost all
the beforedepend targets in the tree a no-op except for this bug.
Removed vestiges of elf and aout targets.
the binutils headers for (machine)-unknown-freebsdelf.
Also copy the bfd.h header to an architecture specific directory
because there are two fundamental lines that differ (32-bit vs 64-bit)
between i386 and alpha.
The config.h for libbinutils generates the same on alpha as i386,
so I didn't change that (though I was tempted!).
support building it for variant architectures. It was already
becoming clear that the former structure was too rigid and didn't
scale well.
The usual sort of makefile magic arranges to .include an architecture
specific makefile "Makefile.${MACHINE_ARCH}" in each directory
where it exists. Also, sources will be found in each subdirectory
"${MACHINE_ARCH}" that exists. This is all taken care of automatically
by the top level "Makefile.inc0".
This all seems to work right for the i386 now. I have also converted
those alpha pieces already present to the new schema as best I
could.
Also: change the BINDIR on the i386 to /usr/libexec/elf for "ar"
and "ranlib". They are not object format independent enough to
put into /usr/bin.
a.out gas and the binutils gas (elf or a.out) with a single compiler.
This uses other infrastructure not yet committed, in order to support
both a.out and elf it needs to be able to get to both a.out and elf
gas, ld, libs, crt* etc. So for now, the support is pretty much dormant.
The new freebsd.h file is based on the old freebsd-elf.h file (which has a
long lineage, right back through linux and svr4 files). The change is
pretty dramatic from a gcc internals standpoint as it overrides a lot of
definitions in order to generate different output based on target mode.
There is potential for screw-ups, so please be on the lookout - gcc's
configuration mechanism wasn't really meant for this kind of thing.
It's believed to compile world etc just fine under both a.out and elf, can
handle global constructors and destructors, handles the differences in
a.out and elf stabs, and what sections things like exceptions go in.
The initial idea came from i386/osfrose.h which is a dual rose/elf format
target. These two are not as diverse as a.out and elf it would seem.
The cc front-end uses external configuration to determine default object
format (still being thrashed out, so read the source if you want to see
it so far), and has a '-aout' and '-elf' override command line switch.
There are some other internal switches that can be accessed, namely -maout,
-mno-aout, -munderscores and -mnounderscores. The underscore and local
symbol prefixing rules are controllable seperately to the output format.
(ie: it's possible to generate a.out without the _ prefixes on symbols and
also to generate elf with the _ prefixes. This isn't quite optimal, but
does seem to work pretty well, except the linkers don't always recognise
the local symbols without their normal names)
The default format is a.out (still), nobody should see any major changes.
With both elf and a.out tools and libraries installed:
[1:26pm]/tmp-223> cc -elf -o hello hello.c
peter@beast[1:27pm]/tmp-224> file hello
hello: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), dynamically linked, not stripped
[1:27pm]/tmp-225> ./hello
hello world!
[1:27pm]/tmp-226> cc -aout -o hello hello.c
[1:27pm]/tmp-227> file hello
hello: FreeBSD/i386 compact demand paged dynamically linked executable not stripped
1:27pm]/tmp-228> ./hello
hello world!
Since my co-conspirators put a lot of effort into this too, I'll add them
so they can share the blame^H^H^H^H^Hglory. :-)
Reviewed by: sos, jdp
libraries so that `ld -f' in can create correct dependencies for
yet-to-be-built libraries.
Get the default BINDIR correctly (by including ../Makefile.inc recursively.
objects depend on all generated headers doesn't work because it gives
cyclic dependencies. Give enough dependencies explicitly. We no
longer need to use .SINGLESHELL for `make depend'. .SINGLESHELL was
more of a bottleneck than usual because `make depend' makes everything.
Fixed some spelling and English errors.
${SRCS} instead of giving inadequate explicit dependencies. There
is still a problem after `make depend; make clean'. Then `make'
barely works, and `make -jN' is confused by absolute paths in
.depend.
strip program (via "install") to strip itself. But the program
wasn't executable because "install" hadn't made it so yet. I
borrowed the method used for the old strip to get around this.
This finishes up the binutils import. But I am leaving it disabled
in "src/gnu/usr.bin/Makefile" for now. It is not used by anything
yet, so I'll take this opportunity to run one more round of tests
before enabling it.
*replace* the SUBDIR list in that case, you want to augment it.
Also move a stray .endif to its proper location. Heh, no wonder my
release builds were falling over! ;)
0xefbfe000) and kernel_start (normally 0xf0100000).
Things are unnecessarily (?) difficult because procfs is used to
access user addresses in the live-kernel case although we must have
access to /dev/mem to work at all, and whatever works for the
dead-kernel case should work in all cases (modulo volatility of
live kernel variables). We used the wrong range [0, kernel_start)
for user addresses. Procfs should only work up to VM_MAXUSER_ADDRESS,
but it bogusly works for reads up to the address 2 pages higher
(the user area, including the kernel stack, is mapped to where the
user area used to be (WTUAUTB)). Procfs can not work at all for
addresses between WTUAUTB and kernel_start.
Now we use procfs only to access addresses up to VM_MAXUSER_ADDRESS.
Higher addresses are translated normally using kvtophys(), so the
user ptd is used for addresses below the real kernel start (0xf0000000;
see INKERNEL()) and nothing is found WTUAUTB.
Strange accesses that cross the user-kernel boundary are now handled,
but such ranges are currently always errors because they necessarily
overlap the hole WTUAUTB.
Short reads are still not handled.
Correct translations would have been null. However, kstack was
the top of the kernel stack instead of the base of the kernel stack
like it was when the kernel exported it, so the area above the
kernel stack was mistranslated and the kernel stack was not
translated. This bug was depended on to compensate for the wrong
value of kstack - to read the pcb, instead of just using the address
of the pcb, we used the mistranslated address of kstack, which
happened to be the same (curpcb = kstack - 0x2000).
This area is simpler than it used to be now that the kernel stack
address is per-process. The code still seems to be more complicated
than necessary - the `found_pcb == 0' case seems to be unused.
gdb was cloned from the buggy version of kvm_uread() in libkvm and
had the same bugs. It looped endlessly on EOF and checked errno
without setting it in the lseek() error check. The first bug caused
gdb to loop endlessly for reads from addresses between the end of
the user area and the start of the kernel text. kvm_uread() should
not be used for addresses beyond the end of the user area, but is
due to bugs elsewhere.
the previous frame is in the usual place even for traps, interrupts
and syscalls in the kernel, because the assembly language stubs
don't change the frame pointer. The previous frame is just not for
the calling function. We may as well depend on this as on magic to
determine the trap frame address. The magic is in FRAME_SAVED_PC()
which elides the correct number of stubs (1) to go back to a pc that
matches the previous frame.
Removing fbsd_kern_frame_chain() fixes bugs in it. Xsyscall was
misspelled as _Xsyscall (gdb removes one leading underscore), so
the tf_syscall frame type was never found. This was harmless
because tf_normal works in all cases in fbsd_kern_frame_chain()
and Xsyscall is spelled correctly in fbsd_kern_frame_saved_pc()
where it matters. There were style bugs on almost every line,
starting with a primary indent of 7.
machine independent, with the only dependency being the binary format
to build. We only expect to build ELF on alpha although we'll need
ECOFF compatibility with Digital Unix.
reduces to a relocatable symbol plus an offset. This preserves
the symbol type information (function vs. object). It is important
for SVR4-style weak symbols, e.g., "#pragma weak foo=bar". Without
this change, the linker complains that the jmpslot entry is not a
function.