Navigation Menu

Skip to content

Commit

Permalink
apply a couple of fixes based on a Coverity report forwarded by Derrick
Browse files Browse the repository at this point in the history
* catalog.c: apply a couple of fixes based on a Coverity report
  forwarded by Derrick Price.
* VxWorks/README VxWorks/Makefile VxWorks/build.sh: instructions
  Makefile, and shell script to build on VxWorks 6.4+ provided by
  Jim Wert.
Daniel

svn path=/trunk/; revision=3747
  • Loading branch information
Daniel Veillard committed Jun 10, 2008
1 parent 39801e5 commit 63806b5
Show file tree
Hide file tree
Showing 5 changed files with 250 additions and 1 deletion.
8 changes: 8 additions & 0 deletions ChangeLog
@@ -1,3 +1,11 @@
Tue Jun 10 16:52:17 CEST 2008 Daniel Veillard <daniel@veillard.com>

* catalog.c: apply a couple of fixes based on a Coverity report
forwarded by Derrick Price.
* VxWorks/README VxWorks/Makefile VxWorks/build.sh: instructions
Makefile, and shell script to build on VxWorks 6.4+ provided by
Jim Wert.

Tue Jun 3 18:07:13 CEST 2008 Daniel Veillard <daniel@veillard.com> Tue Jun 3 18:07:13 CEST 2008 Daniel Veillard <daniel@veillard.com>


* python/generator.py python/setup.py: apply patch from Martin fixing * python/generator.py python/setup.py: apply patch from Martin fixing
Expand Down
68 changes: 68 additions & 0 deletions VxWorks/Makefile
@@ -0,0 +1,68 @@
##----------------------------------------------------------------
##
##-- Filename: Makefile
##
##-- $Date: 2008/02/23 02:56:17 $
##-- $Revision: 1.2 $
##-- $Name: $
##
##----------------------------------------------------------------

NAME = xml2
TOOL_FAMILY=gnu

include $(WIND_USR)/tool/gnu/make.$(VXCPU)

FLAGS = -Wall -g -Isrc -Isrc/include -D_REENTRANT=1
#FLAGS = -Wall -O2 -Isrc -Isrc/include -D_REENTRANT=1

FLAGS += $(DEFINE_CC) $(CC_ARCH_SPEC) -MD -MP -D_VX_CPU=_VX_$(CPU) -D_VX_TOOL_FAMILY=gnu -D_VX_TOOL=$(TOOL)
ifeq ($(VXTYPE),RTP)
FLAGS += -mrtp -fpic -I$(WIND_USR)/h -I$(WIND_USR)/h/wrn/coreip
else
FLAGS += -D_WRS_KERNEL -I$(WIND_BASE)/target/h -I$(WIND_BASE)/target/h/wrn/coreip
endif

ifeq ($(VXTYPE),RTP)
ifeq ($(CPU),SH32)
LIB_LDFLAGS += -L$(WIND_USR)/lib/sh/SH32/commonle/PIC
else
LIB_LDFLAGS += $(LD_LINK_PATH_ATEND) $(LD_PARTIAL_LAST_FLAGS)
endif
endif

OBJS = c14n.o catalog.o chvalid.o \
debugXML.o dict.o DOCBparser.o \
encoding.o entities.o error.o \
globals.o \
hash.o \
legacy.o list.o \
parser.o parserInternals.o pattern.o \
relaxng.o \
SAX2.o SAX.o schematron.o \
threads.o tree.o \
uri.o \
valid.o \
xinclude.o xlink.o xmlcatalog.o xmlIO.o \
xmlmemory.o xmlmodule.o xmlreader.o xmlregexp.o \
xmlsave.o xmlschemas.o xmlschemastypes.o xmlstring.o \
xmlunicode.o xmlwriter.o xpath.o xpointer.o

all : lib$(NAME).so

init :
mkdir -p objs

.PHONY : lib$(NAME).so

lib$(NAME).so : init $(patsubst %.o, objs/%.o, $(OBJS))
$(CC) $(FLAGS) $(LIB_LDFLAGS) -shared -o $@ $(patsubst %.o, objs/%.o, $(OBJS))

(NAME).out : init $(patsubst %.o, objs/%.o, $(OBJS))
$(CC) $(FLAGS) -o $@ $(patsubst %.o, objs/%.o, $(OBJS))

objs/%.o: src/%.c
$(CC) $(FLAGS) -o $@ -c $<

clean:
rm -fR *.so objs
86 changes: 86 additions & 0 deletions VxWorks/README
@@ -0,0 +1,86 @@
libxml2 on VxWorks 6.4+

Here are my instructions for building on VxWorks.... I am very ashamed of
how I did this because it is a complete hack, but it works great, so I
can't complain too much.

General Information

1. The only way to build for VxWorks is to cross compile from a windows or
linux system. We use a RedHat 5.1 workstation system as our build
environment.

2. VxWorks 6.X has two main types of executable, DKMs (dynamic kernel
modules), and RTPs (real-time processes). Kernel modules are the bread
and butter of VxWorks, but they look nothing like processes/threads in
normal UNIX/Windows systems. RTPs are more like processes that have
memory protection, threads, etc. VxWorks 6.X also introduces some level
of POSIX conformance to their environment. The POSIX conformance was the
key for us to be able to port libxml2. We support accessing libxml2 from
both DKMs and RTPs.

3. There are 2 compilers for VxWorks, the WindRiver compiler, and a port
of the GNU toolchain, we have only tested and built with the GNU
toolchain.

How To Build

1. Run the configure on your native linux system (this is the cheesy
hack). Since the VxWorks GNU toolchain is very close in version to the
one in red hat, it generates a good config.h file. We configured libxml2
with the following to keep the size down, (but we have done basic testing
with everything compiled in).

./configure --with-minimum --with-reader --with-writer --with-regexps
--with-threads --with-thread-alloc

2. Rename the libxml2 folder to "src". This step is required for our
replacement makefile to work.

3. Run the replacement makefile. I wrote a new makefile that sets all the
proper vxworks defines and uses the correct compilers. The two defines on
the make command line are to tell it which VxWorks Target (SH3.2 little
endian), and the executable type. We have tested this code on PENTIUM2gnu
and SH32gnule.

This makefile creates a shared library that runs on VxWorks: (libxml2.so)
make -f Makefile.vxworks clean all VXCPU=SH32gnule VXTYPE=RTP

This makefile creates a kernel module that runs on VxWorks: (xml2.out)
make -f Makefile.vxworks clean all VXCPU=SH32gnule VXTYPE=DKM

Important Notes

1. There are several ways that this process could be improved, but at the
end of the day, we make products, not port libraries, so we did a meets
minimum for our needs.

2. VxWorks is the devil, give me embedded linux every day.

3. No matter what I tried, I couldn't get the configure to pick up the
VxWorks toolchain, and in my investigation, it has something to do with
automake/autoconf, not any individual package. VxWorks doesn't play by
the normal rules for building toolchains.

4. The PIC flag in VxWorks (especially for SH processors) is very
important, and very troublesome. On linux, you can liberally use the PIC
flag when compiling and the compiler/linker will ignore it as needed, on
VxWorks if must always be on for shared libraries, and always be off for
static libraries and executables.

5. If anyone wants to work on a better way to do the build of libxml2 for
VxWorks, I'm happy to help as much as I can, but I'm not looking to
support it myself.

Attached Files

1. To use my Makefile for vxworks, you should enter the vxworks
environment (/opt/windriver/wrenv.linux -p vxworks-6.4 for me).
2. Run: build.sh libxml2-2.6.32 SH32gnule RTP (where you have
libxml2-2.6.32.tar.gz and the Makefile in the same directory as the script
file).

Thanks,

Jim Wert Jr.
JWert@ILSTechnology.com
85 changes: 85 additions & 0 deletions VxWorks/build.sh
@@ -0,0 +1,85 @@
LIBXML2=$1
TARGETCPU=$2
TARGETTYPE=$3

if [ -z "$2" ]; then
TARGETCPU=SIMPENTIUMgnu
fi

if [ -z "$3" ]; then
TARGETTYPE=RTP
fi

echo "LIBXML2 Version: ${LIBXML2}"
echo "LIBXML2 Target CPU: ${TARGETCPU}"
echo "LIBXML2 Target Type: ${TARGETTYPE}"

rm -fR src
tar xvzf ${LIBXML2}.tar.gz
mv ${LIBXML2} src
cd src

./configure --with-minimum --with-reader --with-writer --with-regexps --with-threads --with-thread-alloc

find . -name '*.in' -exec rm -fR {} +
find . -name '*.am' -exec rm -fR {} +
rm -fR *.m4
rm -fR *.pc
rm -fR *.pl
rm -fR *.py
rm -fR *.spec
rm -fR .deps
rm -fR AUTHORS
rm -fR bakefile
rm -fR ChangeLog
rm -fR config.guess
rm -fR config.log
rm -fR config.status
rm -fR config.stub
rm -fR config.sub
rm -fR configure
rm -fR COPYING
rm -fR Copyright
rm -fR depcomp
rm -fR doc
rm -fR example
rm -fR INSTALL
rm -fR install-sh
rm -fR libxml.3
rm -fR ltmain.sh
rm -fR Makefile
rm -fR Makefile.tests
rm -fR macos
rm -fR mkinstalldirs
rm -fR missing
rm -fR nanoftp.c
rm -fR nanohttp.c
rm -fR NEWS
rm -fR python
rm -fR README
rm -fR README.tests
rm -fR regressions.xml
rm -fR result
rm -fR runsuite.c
rm -fR runtest.c
rm -fR test
rm -fR test*.c
rm -fR TODO*
rm -fR trio*
rm -fR vms
rm -fR win32
rm -fR xml2*
rm -fR xmllint.c
rm -fR xstc

cd ..

make clean all VXCPU=${TARGETCPU} VXTYPE=${TARGETTYPE}

if [ "${TARGETTYPE}" = "RTP" ]; then
cp libxml2.so ../../lib/.
else
cp xml2.out ../../bin/.
fi

cp -R src/include/libxml ../../include/.
4 changes: 3 additions & 1 deletion catalog.c
Expand Up @@ -2616,6 +2616,8 @@ xmlCatalogSGMLResolve(xmlCatalogPtr catal, const xmlChar *pubID,
return(ret); return(ret);
if (sysID != NULL) if (sysID != NULL)
ret = xmlCatalogGetSGMLSystem(catal->sgml, sysID); ret = xmlCatalogGetSGMLSystem(catal->sgml, sysID);
if (ret != NULL)
return(ret);
return(NULL); return(NULL);
} }


Expand Down Expand Up @@ -2912,7 +2914,7 @@ xmlACatalogResolveURI(xmlCatalogPtr catal, const xmlChar *URI) {


sgml = xmlCatalogSGMLResolve(catal, NULL, URI); sgml = xmlCatalogSGMLResolve(catal, NULL, URI);
if (sgml != NULL) if (sgml != NULL)
sgml = xmlStrdup(sgml); ret = xmlStrdup(sgml);
} }
return(ret); return(ret);
} }
Expand Down

0 comments on commit 63806b5

Please sign in to comment.