Objcopy and alignment
Dave Korn
dk@artimi.com
Tue May 18 15:12:00 GMT 2004
> -----Original Message-----
> From: binutils-owner On Behalf Of Dave Murphy
> Sent: 18 May 2004 15:40
> Is it possible to specify the alignment of binary data when
> using objcopy to
> generate object files from raw data? Failing that, can
> obcopy be told to
> pad the length to, say, an even multiple of 4 bytes?
Since you're using a whole load of shell scripting already, why not just
add a little bit more: you can pad a file $FILE to length four by processing
it like this:
echo -n $(( `cat ${FILE} | wc -c` & 3 )) | sed -e 's/0//g' | sed -e
's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g' >> ${FILE}
I'm not second-nature enough with sed script syntax to know if all those
substitutions can be put into a single sed invocation, but that would be an
obvious optimisation if you can. Here's an example, run against a bunch of
text files I generated from identical starting copies:
dk@mace /repository> cp size0.txt size1.txt
dk@mace /repository> cp size0.txt size2.txt
dk@mace /repository> cp size0.txt size3.txt
dk@mace /repository> cp size0.txt size4.txt
dk@mace /repository> cp size0.txt size5.txt
dk@mace /repository> echo -n a >>size1.txt
dk@mace /repository> echo -n ab >>size2.txt
dk@mace /repository> echo -n abc >>size3.txt
dk@mace /repository> echo -n abcd >>size4.txt
dk@mace /repository> echo -n abcde >>size5.txt
dk@mace /repository> ls -la size?.txt
-rw-r--r-- 1 dk Domain U 124 May 18 15:59 size0.txt
-rw-r--r-- 1 dk Domain U 125 May 18 16:06 size1.txt
-rw-r--r-- 1 dk Domain U 126 May 18 16:06 size2.txt
-rw-r--r-- 1 dk Domain U 127 May 18 16:06 size3.txt
-rw-r--r-- 1 dk Domain U 128 May 18 16:06 size4.txt
-rw-r--r-- 1 dk Domain U 129 May 18 16:07 size5.txt
dk@mace /repository> echo $(( `cat size0.txt | wc -c` & 3 )) | sed -e
's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g'
dk@mace /repository> echo $(( `cat size1.txt | wc -c` & 3 )) | sed -e
's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g'
XXX
dk@mace /repository> echo $(( `cat size2.txt | wc -c` & 3 )) | sed -e
's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g'
XX
dk@mace /repository> echo $(( `cat size3.txt | wc -c` & 3 )) | sed -e
's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g'
X
dk@mace /repository> echo $(( `cat size4.txt | wc -c` & 3 )) | sed -e
's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g'
dk@mace /repository> echo $(( `cat size5.txt | wc -c` & 3 )) | sed -e
's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g'
XXX
dk@mace /repository> # now try actually doing the append!
dk@mace /repository> echo -n $(( `cat size0.txt | wc -c` & 3 )) | sed
-e 's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g' >>
size
0.txt
dk@mace /repository> echo -n $(( `cat size1.txt | wc -c` & 3 )) | sed
-e 's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g' >>
size
1.txt
dk@mace /repository> echo -n $(( `cat size2.txt | wc -c` & 3 )) | sed
-e 's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g' >>
size
2.txt
dk@mace /repository> echo -n $(( `cat size3.txt | wc -c` & 3 )) | sed
-e 's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g' >>
size
3.txt
dk@mace /repository> echo -n $(( `cat size4.txt | wc -c` & 3 )) | sed
-e 's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g' >>
size
4.txt
dk@mace /repository> echo -n $(( `cat size5.txt | wc -c` & 3 )) | sed
-e 's/0//g' | sed -e 's/1/XXX/g' | sed -e 's/2/XX/g' | sed -e 's/3/X/g' >>
size
5.txt
dk@mace /repository> # and verify that's fixed our file sizes for us!
dk@mace /repository> ls -la size?.txt
-rw-r--r-- 1 dk Domain U 124 May 18 15:59 size0.txt
-rw-r--r-- 1 dk Domain U 128 May 18 16:08 size1.txt
-rw-r--r-- 1 dk Domain U 128 May 18 16:08 size2.txt
-rw-r--r-- 1 dk Domain U 128 May 18 16:08 size3.txt
-rw-r--r-- 1 dk Domain U 128 May 18 16:06 size4.txt
-rw-r--r-- 1 dk Domain U 132 May 18 16:09 size5.txt
cheers,
DaveK
--
Can't think of a witty .sigline today....
More information about the Binutils
mailing list