Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F107134908
D34359.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D34359.diff
View Options
diff --git a/sys/kern/kern_ctf.c b/sys/kern/kern_ctf.c
--- a/sys/kern/kern_ctf.c
+++ b/sys/kern/kern_ctf.c
@@ -28,16 +28,11 @@
* $FreeBSD$
*/
+#include <sys/ctf.h>
+
/*
* Note this file is included by both link_elf.c and link_elf_obj.c.
- *
- * The CTF header structure definition can't be used here because it's
- * (annoyingly) covered by the CDDL. We will just use a few bytes from
- * it as an integer array where we 'know' what they mean.
*/
-#define CTF_HDR_SIZE 36
-#define CTF_HDR_STRTAB_U32 7
-#define CTF_HDR_STRLEN_U32 8
#ifdef DDB_CTF
#include <contrib/zlib/zlib.h>
@@ -59,7 +54,7 @@
size_t sz;
struct nameidata nd;
struct thread *td = curthread;
- uint8_t ctf_hdr[CTF_HDR_SIZE];
+ struct ctf_header cth;
#endif
int error = 0;
@@ -174,17 +169,13 @@
}
/* Read the CTF header. */
- if ((error = vn_rdwr(UIO_READ, nd.ni_vp, ctf_hdr, sizeof(ctf_hdr),
+ if ((error = vn_rdwr(UIO_READ, nd.ni_vp, &cth, sizeof(cth),
shdr[i].sh_offset, UIO_SYSSPACE, IO_NODELOCKED, td->td_ucred,
NOCRED, NULL, td)) != 0)
goto out;
/* Check the CTF magic number. */
-#ifdef __LITTLE_ENDIAN__
- if (ctf_hdr[0] != 0xf1 || ctf_hdr[1] != 0xcf) {
-#else
- if (ctf_hdr[0] != 0xcf || ctf_hdr[1] != 0xf1) {
-#endif
+ if (cth.cth_magic != CTF_MAGIC) {
printf("%s(%d): module %s has invalid format\n",
__func__, __LINE__, lf->pathname);
error = EFTYPE;
@@ -192,27 +183,24 @@
}
/* Check if version 2. */
- if (ctf_hdr[2] != 2) {
+ if (cth.cth_version != CTF_VERSION_2) {
printf("%s(%d): module %s CTF format version is %d "
"(2 expected)\n",
- __func__, __LINE__, lf->pathname, ctf_hdr[2]);
+ __func__, __LINE__, lf->pathname, cth.cth_version);
error = EFTYPE;
goto out;
}
/* Check if the data is compressed. */
- if ((ctf_hdr[3] & 0x1) != 0) {
- uint32_t *u32 = (uint32_t *) ctf_hdr;
-
+ if ((cth.cth_flags & CTF_F_COMPRESS) != 0) {
/*
* The last two fields in the CTF header are the offset
* from the end of the header to the start of the string
- * data and the length of that string data. se this
+ * data and the length of that string data. Use this
* information to determine the decompressed CTF data
* buffer required.
*/
- sz = u32[CTF_HDR_STRTAB_U32] + u32[CTF_HDR_STRLEN_U32] +
- sizeof(ctf_hdr);
+ sz = cth.cth_stroff + cth.cth_strlen + sizeof(cth);
/*
* Allocate memory for the compressed CTF data, including
@@ -251,14 +239,14 @@
* The header isn't compressed, so copy that into the
* CTF buffer first.
*/
- bcopy(ctf_hdr, ctftab, sizeof(ctf_hdr));
+ bcopy(&cth, ctftab, sizeof(cth));
- destlen = sz - sizeof(ctf_hdr);
- ret = uncompress(((uint8_t *) ctftab) + sizeof(ctf_hdr),
- &destlen, ((uint8_t *) raw) + sizeof(ctf_hdr),
- shdr[i].sh_size - sizeof(ctf_hdr));
+ destlen = sz - sizeof(cth);
+ ret = uncompress(ctftab + sizeof(cth), &destlen,
+ raw + sizeof(cth), shdr[i].sh_size - sizeof(cth));
if (ret != Z_OK) {
- printf("%s(%d): zlib uncompress returned %d\n", __func__, __LINE__, ret);
+ printf("%s(%d): zlib uncompress returned %d\n",
+ __func__, __LINE__, ret);
error = EIO;
goto out;
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Jan 11, 4:13 PM (19 h, 55 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15755428
Default Alt Text
D34359.diff (3 KB)
Attached To
Mode
D34359: linker: Simplify CTF container handling
Attached
Detach File
Event Timeline
Log In to Comment