Marcum (3-2) won for the first time in three starts, lowering his ERA to 2.70. He allowed just two hits, both singles by Orlando Cabrera, and walked three.
"I felt fine all day," said Marcum, who began feeling ill while the Blue Jays were in Boston earlier this week. "When I was warming up, maybe from running around or something, my stomach felt like it wasn't going to be able to keep anything down. I threw up after the first and the second, but other than that I was able to hang with it."
Marcum's illness was news to catcher Gregg Zaun.
"I had absolutely no idea," he said. "He didn't show any signs of it. His fastball was still as hard as it ever was. I had everything at my disposal tonight."
Marcum, who had soup and a banana for lunch, was still feeling unsettled after the game.
"When I went into the lunchroom I almost threw up again, seeing the food," he said.
The White Sox, who have lost six of nine, have the lowest batting average in the American League (.237) and are a measly 6-for-46 with runners in scoring position in their past six games.
"It's a shame when our pitching staff is doing real good and we're not helping them to win games," White Sox manager Ozzie Guillen said.
The Blue Jays have won two straight, both shutouts, after losing eight of their previous nine -- including six in a row. Toronto beat Boston 3-0 on Thursday.
Chicago left-hander Mark Buehrle (1-3) was the hard-luck loser, giving up two runs -- both unearned -- on five hits in eight innings. He hasn't won since April 6 at Detroit, a span of four starts.
"That's the second time they've broken this kid's heart," Guillen said.
The Blue Jays scored the only runs with two out in the first. Scott Rolen reached on third baseman Joe Crede's throwing error and went to third on a ground-rule double by Vernon Wells. Both runners scored when Stewart singled up the middle.
"When a mistake is made, you've got to capitalize on it," Wells said. "We were able to do that tonight and the two runs held up."
Toronto missed a chance to add to its lead in the fourth after back-to-back singles by Wells and Stewart put runners aboard with nobody out. Lyle Overbay struck out swinging and Zaun was caught looking before Buehrle got Adam Lind to ground out.
"We're still not throwing out five or six runs a game like we're capable of," Zaun said. "For whatever reason, we just haven't been able to get it going."
Blue Jays shortstop John McDonald made a great play to throw out Cabrera in the eighth, grabbing a deflection off Rolen's glove and bouncing his throw to first one step ahead of the runner.
White Sox 1B Paul Konerko (sore right thumb) missed his second straight start but is expected to return Saturday. ... Chicago placed INF/OF Alexei Ramirez on the restricted list before the game and recalled RHP Adam Russell from Triple-A Charlotte. Ramirez, a Cuban defector, cannot travel outside the United States on his work visa. ... The game was played in a brisk 2 hours, 10 minutes.